package com.ztsoft.user.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.PostConstruct;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

@Slf4j
@Component
public class UploadFilesUtils {

    @Value("${file.dataExcelFile}")
    private String dataExcelFile;

    private static String dataExcelFilePath;

    @PostConstruct
    private void getDataExcelFile() {
        dataExcelFilePath = dataExcelFile;
    }

    /**
     * 保存上传文件，并返回文件名集合
     *
     * @param fileList 上传文件列表
     * @return 文件名集合
     */
    public static synchronized List<String> uploadFiles(MultipartFile... fileList) {
        List<String> fileNames = new ArrayList<>();

        if (fileList != null && fileList.length > 0) {
            // 如果上传文件列表不为空
            for (MultipartFile file : fileList) {

                if (file.isEmpty()) {
                    // 如果上传文件为空
                    return Collections.emptyList();
                }

                // 得到上传时的文件名
                String fileName = file.getOriginalFilename();
                // 文件存放路径
                String path = dataExcelFilePath;
                File dest = new File(path + fileName);
                if (dest.exists()) { // 如果该文件已经存在，删除
                    dest.delete();
                }
                if (!dest.getParentFile().exists()) { // 判断文件父目录是否存在
                    dest.getParentFile().mkdir();
                }
                try {
                    // 保存文件
                    FileUtils.copyInputStreamToFile(file.getInputStream(), dest);
                    // 把文件名添加到集合
                    fileNames.add(file.getOriginalFilename());
                } catch (Exception e) {
                    log.error("保存文件出现异常", e);
                } finally {
                    try {
                        file.getInputStream().close();
                    } catch (IOException e) {
                        log.error("上传文件出现异常", e);
                    }
                }
            }
            return fileNames;
        }
        return Collections.emptyList();
    }

}